/* 
 * Copyright 2008 TKK/ComNet
 * Released under GPLv3. See LICENSE.txt for details. 
 */
package input;

import core.DTNHost;
import core.Message;
import core.SimScenario;
import core.World;

/**
 * External event for creating a message.
 */
public class MessageCreateEvent extends MessageEvent {
	private int size;
	private int responseSize;

	/**
	 * Creates a message creation event with a optional response request
	 * 
	 * @param from
	 *            The creator of the message
	 * @param to
	 *            Where the message is destined to
	 * @param id
	 *            ID of the message
	 * @param size
	 *            Size of the message
	 * @param responseSize
	 *            Size of the requested response message or 0 if no response is
	 *            requested
	 * @param time
	 *            Time, when the message is created
	 */
	public MessageCreateEvent(int from, int to, String id, int size,
			int responseSize, double time) {
		super(from, to, id, time);
		this.size = size;
		this.responseSize = responseSize;
	}

	/**
	 * Creates the message this event represents.
	 */
	public void processEvent(World world) {
		DTNHost to = world.getNodeByAddress(this.toAddr);
		DTNHost from = world.getNodeByAddress(this.fromAddr);

		Message m = new Message(from, to, this.id, this.size);
		if (SimScenario.isAnonOn) {
			m.setAnonymous(true);
		}
		m.notifyCreated();
		m.setResponseSize(this.responseSize);
		from.createNewMessage(m);
	}

	public String toString() {
		return super.toString() + " [" + fromAddr + "->" + toAddr + "] "
				+ "size:" + size + " CREATE";
	}
}
